[XML]:SAX(Simple API for XML) :: 에이젝스 일반[SSISO Community]
 
SSISO 카페 SSISO Source SSISO 구직 SSISO 쇼핑몰 SSISO 맛집
추천검색어 : JUnit   Log4j   ajax   spring   struts   struts-config.xml   Synchronized   책정보   Ajax 마스터하기   우측부분

에이젝스 일반
[1]
등록일:2008-03-20 16:04:15 (0%)
작성자:
제목:[XML]:SAX(Simple API for XML)

1. SAX 개념 이해하기

   1-1. SAX(Simple API for XML) 란?

         1) XML를 위한 Simple API의 표준으로 XML 문서를 처리하기 위해 DOM 대신 사용할 수

            있는 대안이며 DOM과는 다르게 Default Object Model을 가지고 있지 않다.

         2) DOM에 비해 단순한 인터페이스이며, 처리해야 할 파일이 많거나 매우 큰 경우에 적합

            하지만 데이터 내용을 조작할 수 있는 기능은 상대적으로 적다.

         3) 이벤트 중심의 인터페이스로서 프로그래머가 발생할 수 있는 이벤트를 설정해 놓는다

         4) SAX 문서를 이용한 XML 문서 생성 과정

            (1) 1단계 : XML 문서를 취급하기 위하여 프로그램에서 XML 문서를 읽어들인다.

            (2) 2단계 : DOM처럼 불러들인 XML 문서를 XML 파서(XML Parser, XML 해석기)에

                          의해 트리 구조로 만들지 않고 직접 프로그램상에서 XML 문서를 차례로 읽으

                          면서 그에 맞는 이벤트가 발생하였을 때 SAX API를 이용하여 사용자가 작성한

                          문서대로 XML 문서를 조작한다.

            (1) 1단계 : 조작되어진 XML 문서를 프로그램이 마무리하여 생성 혹은 갱신하게 된다.

   1-2. DOM과 SAX의 비교

비고

SAX

DOM

접근방법

이벤트 기반

트리 기반

   

메모리 효율, 빠른 속도

문서의  임의접근

   

구조에 대한 접근 곤란

읽기 전용, 브라우저 지원 안됨

메모리 사용량

속도 느림

적용분야

문서 일부분만 읽을

데이터 변환시, 유효성 처리

구조적 접근이 필요한 경우

문서 정보를 쉽게 파악할

 

  1-3. SAX의 구조와 원리

         SAX는 순차적으로 하나의 엘리먼트를 파싱해서 처리한다. 이때 트리 형태로 구성하는 과정

        은 생략하므로 SAX를 순차접근 프로토콜이라 한다. 또한 사건중심 프로토콜이라고 불리

        는데, 이는 XML 핸들러가 SAX 파서에 자신을 등록하고 새로운 XML 태그가 발견될 때마다

        Call-back 메소드를 통해 XML 핸들러에게 알려주는 방법을 쓰고 있기 때문이다.

        1) SAX를 이용한 문서 변환

            SAX는 이벤트 중심의 인터페이스이므로  프로그래머가 일어날 수 있는 이벤트를 설정해

           놓고 해당 이벤트가 발생할 때 SAX가 제어권을 가지고 상황을 처리한다.

        2) XML 문서와 SAX 처리 구조

            SAX에 의한 XML 문서처리는 SAX Parser에 의해 각각 이벤트가 발생되는 시점을 SAX

           interface가 처리한다. 그리고 XML 문서에 대해 응용프로그램이 파싱을 요청하면 XML

           파서는 SAX 이벤트 핸들러에게 정보를 전달하고 응용프로그램이 이벤트 핸들러에 맞게

           XML 문서를 조작하도록 하고 있다.

        3) SAX 문서와 이벤트 발생 시점

            XML 문서에서 이벤트가 각각 발생되는 시점을 번호로 표시하였는데 순서대로 순차적으로

           이벤트가 발생하게 된다.

             <?xml version="1.0" encoding="EUC-KR"?> ①
                <문헌정보> ②
                    <책> ③
                        <제목> ④XML ⑤</제목>⑥

                        <저자> ⑦홍길동 ⑧</저자>⑨
                    </책> ⑩
                 </문헌정보> ⑪

              ⑫

            ① startDocument  Event 호출

            ②③④⑦ startElement() Event 호출

            ⑥⑨⑩⑪ endElement() Event 호출

            ⑤⑧ character Event 호출

            ⑫ EndDocument Event 호출

2. SAX API

   2-1. SAX 인터페이스

          Java의 org.w3c.sax, org.w3c.sax.helpers 패키지 안에 자주 쓰이는 SAX 인터페이스.

          ⊙ DefaultHandler
          ⊙ DocumentHandler

          ⊙ ContentHandler

          ⊙ DTDHandler

          ⊙ EntityResolver

          ⊙ ErrorHandler

   2-2. DefaultHandler 인터페이스

          org.xml.sax.helper 패키지 안에 정의되어 있는 클래스로 SAX를 이용하여 XML 문서를

         처리하기 위한 기본적인 메소드들을 제공한다.

          1) DefaultHandler 인터페이스 특징

              DefaultHandler는 SAX 2.0의 EntityResolver, DTDHandler, ContentHandler, ErrorHand

             ler의 코어 핸들러 클래스에 포함되는 모든 콜백의 디폴트 구현을 제공한다. 그리고 애플

             리케이션의 작성자는 인터페이스의 일부만을 구현할 필요가 있을 때, 이 클래스를 확장

             한다. 따라서 파서 작성자는 어플리케이션 고유의 디폴트 핸들러가 제공되지 않을 때,

             이 클래스를 인스턴스화하여 DefaultHandler를 제공하게 된다.

          2) DefaultHandler 인터페이스의 메소드

              (1) startDocument()

                   XML 문서가 시작될 때 발생되는 메소드로서 처음 한번 자동으로 호출되기 때문에

                  문서의 시작점에서 실행할 일들을 이 부분에 작성하면 된다.

              (2) endDocument()

                   XML 문서가 끝날때 발생되는 메소드로서 문서의 마지막에서 자동으로 한번 호출되

                  기 때문에 문서의 마지막 시점에서 실행할 일들을 이 부분에 기술하면 된다.

              (3) startElement(String uri, String localName, String qName, Attributes attributes)

                   시작요소를 만날 때마다 발생되는 메소드로서 전달인자로 uri(요소의 uri값), local

                  Name(요소의 localName), qName(요소의 이름), attributes(요소의 속성리스트)

                  4개가 있으며 리턴 값은 없다.

              (4) endElement(String uri, String localName, String qName)

                   끝요소를 만날 때마다 발생되는 메소드로 startElement()메소드와 하는 일이 거의

                  같으며 단지, 끝 요소에는 속성이 포함되지 않는다. 3가지가 있으며 리턴 값은 없다.

              (5) characters(char[] ch, int start, int length)

                   요소 안의 문자 데이터를 만날 때마다 발생되는 메소드로서 전달인자로 ch(문자

                  데이터), start(문자의 시작위치), length(문자의 길이) 3개가 있으며 리턴 값은 없다.

                  텍스트(문자열)을 출력하기 위해서는 String() 메소드를 이용한다.

              (6) processingInstruction(String target, String data)

                   processingInstruction을 만날 대마다 발생되는 메소드로서 전달인다로 target(프로

                  세싱 인스트럭션 타겟), data(프로세싱 인스트럭션 데이터 또는 none일 때 null값)

                  2개가 있으며 리턴 값은 없다.

   2-3. DocumentHandler 인터페이스

          엘리먼트, 텍스트 노드, 주석, 처리 명령 등이 Document의 컨텍스트 밖에 존재할 수 없기

         때문에 Document 인터페이스는 이 객체들을 만드는데 필요한 메소드 요소를 포함한다.

         생성된 Node 객체들은 자신들이 만들었던 그 Document의 컨텍스트에서 Document와

         Node를 관련짓는 속성을 가진다. 각각의 특성은 DefaultHandler에 있는 메소드와 같은

         기능을 한다.

          1) DocumentHandler 인터페이스 메소드
              (1) startDocument()

              (2) endDocument()

              (3) startElement(String uri, String localName, String qName, Attributes attributes)

              (4) endElement(String uri, String localName, String qName)

              (5) characters(char[] ch, int start, int length)

              (6) processingInstruction(String target, String data)

   2-4. ContentHandler 인터페이스

          SAX의 핵심으로 일반적인 문서 이벤트를 위한 호출이고 이 메소드는 문서의 시작, 요소의

         시작과 끝, 요소가 포함하는 내용의 문자를 만날 때 호출한다. 각각의 특성은 DefaultHandler

         에 있는 메소드와 같은 기능을 한다.

          1) ContentHandler 인터페이스 메소드
              (1) startDocument()

              (2) endDocument()

              (3) startElement(String uri, String localName, String qName, Attributes attributes)

              (4) endElement(String uri, String localName, String qName)

              (5) characters(char[] ch, int start, int length)

              (6) processingInstruction(String target, String data)

   2-5. DTDHandler 인터페이스

          DTD와 관련된 기초적인 이벤트가 발생될 때 사용되는 인터페이스이다. 만약 SAX 애플리케

         이션이 표기법과 파싱이 되지 않는 존재에 대한 정보를 필요로 할 경우, 애플리케이션이 이

         인터페이스를 실행한다. 또한 파서의 setDTDHandler 방법을 사용하여 인스턴스를 등록한다.

          1) DTDHandler 인터페이스의 특징

              XML 문서의 DTD를 파싱하는 동안 발생하는 notation 선언이나 파싱되지 않은 엔티티

             선언을 만나면 이벤트를 발생시킨다.

          2) DTDHandler 인터페이스 메소드

              (1) notationDecl(String name, String publicld, String systemld)

                   노테이션 선언을 알려주는 메소드 즉, 표기법 선언을 만날 때 발생되는 메소드로

                  name(표기법 이름), publicId(none이면 null값을 갖음), systemId(none이면 null

                  값을 갖음) 3개의 전달인자를 갖는다.

              (2) upparseEntityDecl(String name, String publicld, String systemld, String notation

                    Name)

                   파싱되지 않은 엔티티 선언을 알려주는 메소드 즉, 파싱이 안된 entity 선언을 만날

                  때 발생되는 메소드로 name(파싱이 안된 entity의 이름), publicId(entity의 public 

                  identifier), systemId(entity의 system identifier), notationName(notation 이름) 4개의

                  전달인자를 받는다.

   2-6. EntityResolver 인터페이스

          엔티티를 해결하기 위한 기본 인터페이스로서 외부 엔티티의 처리를 구현할 필요가 있는

         경우에 사용한다. SAX 애플리케이션은 이 인터페이스의 setEntityResolver 메소드를 사용

         하여 SAX 드라이버에 인스턴스를 등록한다.

          1) EntityResolver 인터페이스의 특징

              이 인터페이스를 구현해야 하는 SAX 애플리케이션은 많지 않다. 하지만 데이타베이스

             나 그 외의 특수한 입력 소소로부터 XML 문서를 구축하는 애플리케이션, 혹은 URL

             이외의 URI 형을 사용하는 애플리케이션에 있어 매우 유익하다.

          2) EntityResolver 인터페이스 메소드

              (1) resolveEntity (String publicld, String systemld)

                   애플리케이션이 외부 엔티티를 전개하도록 하고, publicId(참조되는 외부 엔티티의

                  공개 식별자, 제공되지 않을 경우는 null 값을 가짐), systemId(참조되는 외부 엔티티

                  의 시스템 식별자) 2개의 인자를 갖는다.

   2-7. ErrorHandler 인터페이스

          ErrorHandler 인터페이스는 SAX 에러 핸들러의 기본 인터페이스이다. 프로그램 작성중에

         에러 처리를 구현할 필요가 있는 경우에 사용하게 된다.

          1) ErrorHandler 인터페이스의 특징

              SAX 애플리케이션에서 특정화된 에러 핸들링을 구현할 필요가 있을 경우, 애플리케이션

             에서는 먼저 이 인터페치스로 구현한다. 그런 다음 setErrorHandler 메소드를 사용하여

             만들어진 인스턴스를 SAX 파서에게 등록한다. 이후, 파서는 이 인터페이스를 통하여 모

             든 에러 및 경고를 알려주게 된다.

          2) ErrorHandler 인터페이스 메소드

              (1) error (SAXParseException exception)

                   회복 가능한 에러의 공지를 받는다. 이때 SAX 파서는 이 메소드를 사용해, XML 1.0

                  권고안에 정의된 에러 또는 치명적인 에러 이외의 조건을 보고한다. 기본적으로는 어

                  떠한 조치도 취하지 않는다.

              (2) void fatalError (SAXParseException exception)

                   회복될 수 없는 에러의 공지를 받는데, 이는 W3C XML 1.0 권고안 섹션 1.2의 '치명적

                  에러'의 정의를 따른다. 

              (3) void warning (SAXParseException exception)

                   경고의 공지를 받는다. SAX 파서는 XML 1.0 권고안에 의하여 정의되는 에러 또는

                  치명적 에러가 아닌 조건들을 보고하기 위해서 이 메소드를 사용한다.

 

FROM : http://blog.naver.com/web28?Redirect=Log&logNo=60007856050


[본문링크] [XML]:SAX(Simple API for XML)
[1]
코멘트(이글의 트랙백 주소:/cafe/tb_receive.php?no=2916
작성자
비밀번호

 

SSISOCommunity

[이전]

Copyright byCopyright ⓒ2005, SSISO Community All Rights Reserved.